package com.example.empleemanagesystem.controller;

import com.example.empleemanagesystem.entity.Attendance;
import com.example.empleemanagesystem.service.AttendanceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.stream.Collectors;

// Spring RESTful风格的Web服务控制器，处理HTTP请求并返回JSON数据
@RestController
// 处理请求的基础路径
@RequestMapping("/attendance")
public class AttendanceController {

    // Spring依赖注入，自动装配一个AttendanceService类型的实例，用于调用业务逻辑层提供的考勤相关业务逻辑方法
    @Autowired
    private AttendanceService attendanceService;

    // 获取所有数据的接口
    // HTTP GET请求方法
    @GetMapping("/list")
    public List<Attendance> getAllAttendance() {
        // 调用AttendanceService层的findAll方法获取所有考勤记录（以AttendanceVO形式返回），然后通过Stream API进行映射转换
        return attendanceService.findAll().stream().map(attendanceVO -> {
            // 创建一个新的Attendance对象，用于将从AttendanceVO中获取的数据进行重新封装，以适应返回给客户端的实体类型要求
            Attendance attendance = new Attendance();
            attendance.setId(attendanceVO.getId());
            attendance.setNumber(attendanceVO.getNumber());
            attendance.setName(attendanceVO.getName());
            attendance.setArrive_late_times(attendanceVO.getArrive_late_times());
            attendance.setLeave_early_times(attendanceVO.getLeave_early_times());
            return attendance;
        }).collect(Collectors.toList());//对流中的元素进行最终的收集汇总，转换为一个列表
    }

    // 获取arrive_late_times超过4次的数据
    // HTTP GET请求方法
    @GetMapping("/late")
    public List<Attendance> getLateAttendance() {
        // 调用AttendanceService层的findAll方法获取所有考勤记录（以AttendanceVO形式返回），然后通过Stream API进行过滤和映射转换
        return attendanceService.findAll().stream()
                // 使用filter方法过滤出迟到次数大于4次的考勤记录
                .filter(attendanceVO -> attendanceVO.getArrive_late_times() > 4)
                .map(attendanceVO -> {
                    Attendance attendance = new Attendance();
                    attendance.setId(attendanceVO.getId());
                    attendance.setNumber(attendanceVO.getNumber());
                    attendance.setName(attendanceVO.getName());
                    attendance.setArrive_late_times(attendanceVO.getArrive_late_times());
                    attendance.setLeave_early_times(attendanceVO.getLeave_early_times());
                    return attendance;
                }).collect(Collectors.toList());//对流中的元素进行最终的收集汇总，转换为一个列表
    }

    // 获取leave_early_times超过4次的数据
    // HTTP GET请求方法
    @GetMapping("/early")
    public List<Attendance> getEarlyLeaveAttendance() {
        // 调用AttendanceService层的findAll方法获取所有考勤记录（以AttendanceVO形式返回），然后通过Stream API进行过滤和映射转换
        return attendanceService.findAll().stream()
                // 使用filter方法过滤出早退次数大于4次的考勤记录
                .filter(attendanceVO -> attendanceVO.getLeave_early_times() > 4)
                .map(attendanceVO -> {
                    Attendance attendance = new Attendance();
                    attendance.setId(attendanceVO.getId());
                    attendance.setNumber(attendanceVO.getNumber());
                    attendance.setName(attendanceVO.getName());
                    attendance.setArrive_late_times(attendanceVO.getArrive_late_times());
                    attendance.setLeave_early_times(attendanceVO.getLeave_early_times());
                    return attendance;
                }).collect(Collectors.toList());//对流中的元素进行最终的收集汇总，转换为一个列表
    }
}